﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace UML_editor_Class_Diagam_v1._0
{
    public partial class comment_diagram_element : UserControl
    {
        //текст для считывания
        public string textComment;

        public delegate void CommentChangedEventHandler(object sender, CommentArgs e);
        public event CommentChangedEventHandler CommentChanged;

        public comment_diagram_element()
        {
            InitializeComponent();
            //прозрачность фона лэйбла ля текста комментария
            lb_comment.BackColor = Color.Transparent;
            rTB_Comment.RightMargin = 130;
            lb_comment.Click += label1_Click;
            this.Click += comment_diagram_element_Click;
        }
        public class CommentArgs : EventArgs
        {
            public string text_comment;
        }
        //активируем ввод текста коментария щелчком по надписи
        private void label1_Click(object sender, EventArgs e)
        {
            rTB_Comment.Visible = true;
            rTB_Comment.KeyDown += rTB_Comment_KeyDown;

        }
        //нажатие ESC прекращает ввод текста
        private void rTB_Comment_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                if (rTB_Comment.Text.Length > 0)
                {
                    lb_comment.Text = rTB_Comment.Text;
                }
                rTB_Comment.Visible = false;
                lb_comment.BackColor = Color.Transparent;

            }
        }
        //кликаем по полю контрола и у нас поле ввода текста комментария
        //становиться неактивным
        private void comment_diagram_element_Click(object sender, EventArgs e)
        {
            //если мы не в режиме отстройки связей,то просто закрываем все текстбоксы
            if (Form1.isLinkAction == false)
            {
                if (rTB_Comment.Text.Length > 0)
                {
                    lb_comment.Text = rTB_Comment.Text;
                }
                rTB_Comment.Visible = false;
                lb_comment.BackColor = Color.Transparent;
            }
            //иначе при одинарном щелчке левой кнопки мыши мы посылаем сигнал общему классу о том
            //что необходимо считать координаты для связей (только там мы можем определить sender'а среди контролов) 
            else
            {
                CommentArgs args = new CommentArgs();
                args.text_comment = lb_comment.Text;
                OnCommentChanged(args);
            }
            

        }
        //из-за особенности нашего отображения в label переводит каретку 
        //через каждые 20 символов на новую строку P.S. перенос слов не 
        //соблюдается
        private void rTB_Comment_TextChanged(object sender, EventArgs e)
        {
            if ((rTB_Comment.Text.Length % 20) == 0)
            {
                rTB_Comment.Text += Environment.NewLine;
                rTB_Comment.SelectionStart = rTB_Comment.Text.Length;
                rTB_Comment.Focus();
            }
        }
        //возвращает текст коментария
        public string return_comment()
        {
            string str = "";
            if (rTB_Comment.Visible == false)
                str= lb_comment.Text;
            else
                str = rTB_Comment.Text;

           return str;
        }
        // импортируем запись таким вот образом
        public void import_comment(string importCommentText)
        {
            lb_comment.Text = importCommentText;
            rTB_Comment.Visible = false;
        }
        protected void OnCommentChanged(CommentArgs e)
        {
            CommentChanged(this, e);
        } 

    }
}
